package com.ac.response;

import java.util.HashMap;

/**
 * 公用的返回Vo对象 vo对象为前端需要的数据类型 使用场景：业务层将DTO装换成vo返回
 */
public class Res extends HashMap<String, Object> {

	private static final long serialVersionUID = 1L;

	/**
	 * 状态码
	 */
	public static final String CODE_TAG = "code";

	/**
	 * 返回内容
	 */
	public static final String MSG_TAG = "msg";

	/**
	 * 数据对象
	 */
	public static final String DATA_TAG = "data";

	/**
	 * 数据总条数
	 */
	public static final String DATA_TOTAL = "total";

	/**
	 * token
	 */
	public static final String DATA_TOKEN = "tag";

	/**
	 * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
	 */
	public Res() {
	}

	/**
	 * 初始化一个新创建的 AjaxResult 对象
	 *
	 * @param code 状态码
	 * @param msg  返回内容
	 */
	public Res(int code, String msg) {
		super.put(CODE_TAG, code);
		if (msg != null)
			super.put(MSG_TAG, msg);
	}

	/**
	 * 初始化一个新创建的 AjaxResult 对象
	 *
	 * @param code 状态码
	 * @param msg  返回内容
	 * @param data 数据对象
	 */
	public Res(int code, String msg, Object data) {
		super.put(CODE_TAG, code);
		if (msg != null)
			super.put(MSG_TAG, msg);
		super.put(DATA_TAG, data);
	}

	/**
	 * 初始化一个新创建的 AjaxResult 对象
	 *
	 * @param code  状态码
	 * @param msg   返回内容
	 * @param data  数据对象
	 * @param total 数据总条数
	 */
	public Res(int code, String msg, Object data, Long total) {
		super.put(CODE_TAG, code);
		if (msg != null)
			super.put(MSG_TAG, msg);
		super.put(DATA_TAG, data);
		super.put(DATA_TOTAL, total);
	}

	public Res token(String token) {
		super.put(DATA_TOKEN, token);
		return this;
	}

	/**
	 * 返回成功消息
	 *
	 * @return 成功消息
	 */
	public static Res success() {
		return Res.success("操作成功");
	}

	/**
	 * 返回成功数据
	 *
	 * @return 成功消息
	 */
	public static Res success(Object data) {
		return Res.success("操作成功", data);
	}

	/**
	 * 返回成功消息
	 *
	 * @param msg 返回内容
	 * @return 成功消息
	 */
	public static Res success(String msg) {
		return Res.success(msg, null);
	}

	/**
	 * 返回成功消息
	 *
	 * @param msg  返回内容
	 * @param data 数据对象
	 * @return 成功消息
	 */
	public static Res success(String msg, Object data) {
		return new Res(HttpStatus.SUCCESS, msg, data);
	}

	/**
	 * 返回成功消息
	 *
	 * @param msg   返回内容
	 * @param data  数据对象
	 * @param total 数据总条数
	 * @return 成功消息
	 */
	public static Res success(String msg, Object data, Long total) {
		return new Res(HttpStatus.SUCCESS, msg, data, total);
	}

	/**
	 * 返回成功消息
	 *
	 * @param msg   返回内容
	 * @param data  数据对象
	 * @param total 数据总条数
	 * @return 成功消息
	 */
	public static Res success(String msg, Object data, int total) {
		return new Res(HttpStatus.SUCCESS, msg, data, (long) total);
	}

	/**
	 * 返回失败消息
	 */
	public static Res fail() {
		return Res.fail("操作失败");
	}

	/**
	 * 返回失败消息
	 *
	 * @param msg 返回内容
	 * @return 警告消息
	 */
	public static Res fail(String msg) {
		return Res.fail(msg, null);
	}

	/**
	 * 返回失败消息
	 *
	 * @param msg  返回内容
	 * @param data 数据对象
	 * @return 警告消息
	 */
	public static Res fail(String msg, Object data) {
		return new Res(HttpStatus.BAD_REQUEST, msg, data);
	}

	/**
	 * 返回错误消息
	 */
	public static Res error() {
		return Res.error("操作失败");
	}

	/**
	 * 返回错误消息
	 *
	 * @param msg 返回内容
	 * @return 警告消息
	 */
	public static Res error(String msg) {
		return Res.error(msg, null);
	}

	/**
	 * 返回错误消息
	 *
	 * @param msg  返回内容
	 * @param data 数据对象
	 * @return 警告消息
	 */
	public static Res error(String msg, Object data) {
		return new Res(HttpStatus.ERROR, msg, data);
	}

	/**
	 * 返回错误消息
	 *
	 * @param code 状态码
	 * @param msg  返回内容
	 * @return 警告消息
	 */
	public static Res error(int code, String msg) {
		return new Res(code, msg, null);
	}

	/**
	 * 返回错误消息
	 *
	 * @param rows 状态码
	 * @return 添加修改删除转化信息
	 */
	public static Res toAjax(int rows) {
		return rows > 0 ? Res.success() : Res.fail();
	}

}
